package com.ansion.commonchat.startup.workmanager.bwork.impl;

import androidx.annotation.NonNull;

import com.ansion.commonchat.startup.workmanager.bwork.impl.mode.BWorkSpec;

/**
 * Created by wanghongjie on 2023/5/5
 * Describe :  用于处理任务的调度和触发。
 * <p>
 * Scheduler 类的作用如下：
 * 1.注册任务调度器：Scheduler 可以注册不同类型的任务调度器，例如 GreedyScheduler、SystemAlarmScheduler 等。这些调度器负责根据不同的调度策略和约束条件来触发任务的执行。
 * 2.取消任务调度：Scheduler 可以取消已经调度的任务，例如通过 cancel 方法取消任务的调度。它会与底层的系统调度器（例如 JobScheduler、AlarmManager）进行交互，通知其取消任务的调度。
 * 3.调度新的任务：Scheduler 可以根据传入的任务信息，使用合适的调度器来调度新的任务。它会根据任务的约束条件、调度策略和优先级来决定任务的调度方式和时间。
 * 4.处理任务调度的冲突和限制：Scheduler 负责处理任务调度的冲突和限制。它会根据任务的约束条件和系统资源的可用性，决定任务是否能够被调度和触发执行。
 * <p>
 * 总之，Scheduler 是 WorkManager 内部用于任务调度和触发的组件。
 * 它管理不同类型的任务调度器，并根据任务的约束条件和调度策略来触发任务的执行。
 * 通过使用 Scheduler，WorkManager 可以灵活地控制任务的调度和触发，并提供可靠的任务执行机制。
 * <p>
 * 注意：由于使用场景比较单一，此处只使用了 GreedyScheduler 来调度
 */
public interface BScheduler {

    void schedule(@NonNull BWorkSpec... workSpecs);

    void cancel(@NonNull String workSpecId);

    boolean hasLimitedSchedulingSlots();
}